//
// MudTools.OfficeInterop 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using MudTools.OfficeInterop;
using MudTools.OfficeInterop.Word;

namespace RibbonCustomizationSample
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("MudTools.OfficeInterop.Word - 功能区(Ribbon)定制示例");

            // 示例1: Ribbon控件操作
            Console.WriteLine("\n=== 示例1: Ribbon控件操作 ===");
            RibbonControlOperationsDemo();

            // 示例2: 自定义选项卡
            Console.WriteLine("\n=== 示例2: 自定义选项卡 ===");
            CustomTabsDemo();

            // 示例3: 动态UI更新
            Console.WriteLine("\n=== 示例3: 动态UI更新 ===");
            DynamicUIUpdateDemo();

            // 示例4: 实际应用示例
            Console.WriteLine("\n=== 示例4: 实际应用示例 ===");
            RealWorldApplicationDemo();

            // 示例5: 使用辅助类的完整示例
            Console.WriteLine("\n=== 示例5: 使用辅助类的完整示例 ===");
            CompleteExampleWithHelpers();

            Console.WriteLine("\n按任意键退出...");
            Console.ReadKey();
        }

        /// <summary>
        /// Ribbon控件操作示例
        /// </summary>
        static void RibbonControlOperationsDemo()
        {
            try
            {
                // 说明Ribbon定制的实现方式
                Console.WriteLine("Ribbon定制通常需要通过XML文件和回调函数实现");
                Console.WriteLine("在纯COM互操作中，直接访问Ribbon对象通常不可用");
                Console.WriteLine("实际应用中，Ribbon定制通常通过以下方式实现：");
                Console.WriteLine("1. 创建Ribbon XML定义文件");
                Console.WriteLine("2. 实现Ribbon回调函数");
                Console.WriteLine("3. 注册自定义Ribbon");

                Console.WriteLine("Ribbon控件操作演示完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ribbon控件操作演示出错: {ex.Message}");
            }
        }

        /// <summary>
        /// 自定义选项卡示例
        /// </summary>
        static void CustomTabsDemo()
        {
            try
            {
                // Ribbon XML定义示例
                string ribbonXml = @"
<customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui'>
  <ribbon>
    <tabs>
      <tab id='customTab' label='我的工具'>
        <group id='customGroup' label='文档处理'>
          <button id='btnProcess' label='处理文档' onAction='OnProcessDocument' />
          <button id='btnExport' label='导出数据' onAction='OnExportData' />
        </group>
        <group id='formatGroup' label='格式化'>
          <button id='btnBold' label='加粗' onAction='OnBoldText' />
          <button id='btnItalic' label='斜体' onAction='OnItalicText' />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>";

                Console.WriteLine("Ribbon XML定义示例：");
                Console.WriteLine(ribbonXml);

                // 回调函数示例说明
                Console.WriteLine("\n回调函数示例（在VSTO插件中实现）：");
                Console.WriteLine("public void OnProcessDocument(IRibbonControl control)");
                Console.WriteLine("{");
                Console.WriteLine("    // 处理文档的代码");
                Console.WriteLine("    MessageBox.Show(\"处理文档\");");
                Console.WriteLine("}");

                Console.WriteLine("\n自定义选项卡演示完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"自定义选项卡演示出错: {ex.Message}");
            }
        }

        /// <summary>
        /// 动态UI更新示例
        /// </summary>
        static void DynamicUIUpdateDemo()
        {
            try
            {
                // 动态UI更新的Ribbon XML
                string dynamicRibbonXml = @"
<customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui' onLoad='OnRibbonLoad'>
  <ribbon>
    <tabs>
      <tab id='dynamicTab' label='动态工具'>
        <group id='selectionGroup' label='选择操作'>
          <button id='btnCopy' label='复制' onAction='OnCopy' getEnabled='IsTextSelected' />
          <button id='btnCut' label='剪切' onAction='OnCut' getEnabled='IsTextSelected' />
          <button id='btnPaste' label='粘贴' onAction='OnPaste' getEnabled='IsClipboardNotEmpty' />
        </group>
        <group id='documentGroup' label='文档状态'>
          <button id='btnSave' label='保存' onAction='OnSave' getEnabled='IsDocumentModified' />
          <button id='btnPrint' label='打印' onAction='OnPrint' />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>";

                Console.WriteLine("动态UI更新的Ribbon XML：");
                Console.WriteLine(dynamicRibbonXml);

                // 动态更新回调函数示例说明
                Console.WriteLine("\n动态更新回调函数示例：");
                Console.WriteLine("public bool IsTextSelected(IRibbonControl control)");
                Console.WriteLine("{");
                Console.WriteLine("    var selection = Application.Selection;");
                Console.WriteLine("    return selection != null && !string.IsNullOrEmpty(selection.Text);");
                Console.WriteLine("}");

                Console.WriteLine("\n动态UI更新演示完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"动态UI更新演示出错: {ex.Message}");
            }
        }

        /// <summary>
        /// 实际应用示例
        /// </summary>
        static void RealWorldApplicationDemo()
        {
            try
            {
                // 模拟使用MudTools.OfficeInterop.Word创建支持Ribbon定制的文档
                using var app = WordFactory.BlankWorkbook();
                app.Visible = true;

                try
                {
                    var document = app.ActiveDocument;

                    // 创建示例文档内容
                    document.Range().Text = "Ribbon定制支持文档\n\n" +
                                          "此文档演示了如何为Word开发支持自定义Ribbon的插件。\n\n" +
                                          "主要特性包括：\n" +
                                          "1. 自定义选项卡和组\n" +
                                          "2. 动态UI更新\n" +
                                          "3. 图标和图像支持\n" +
                                          "4. 回调函数处理\n\n" +
                                          "请在VSTO插件项目中实现完整的Ribbon定制功能。";

                    // 格式化标题
                    var titleRange = document.Range(0, 12);
                    titleRange.Font.Size = 16;
                    titleRange.Font.Bold = true;
                    titleRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

                    // 格式化列表
                    var listStart = document.Range().Text.IndexOf("主要特性包括：");
                    var listEnd = document.Range().Text.IndexOf("请在VSTO插件项目中");
                    if (listStart > 0 && listEnd > listStart)
                    {
                        var listRange = document.Range(listStart, listEnd);
                        listRange.ListFormat.ApplyBulletDefault();
                    }

                    // 保存文档
                    string filePath = Path.Combine(Path.GetTempPath(), "RibbonSupportingDocument.docx");
                    document.SaveAs(filePath);

                    Console.WriteLine($"Ribbon支持文档已创建: {filePath}");
                    Console.WriteLine("注意：完整的Ribbon定制需要在VSTO插件环境中实现");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"创建文档时出错: {ex.Message}");
                }

                Console.WriteLine("\n实际应用示例演示完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"实际应用示例演示出错: {ex.Message}");
            }
        }

        /// <summary>
        /// 使用辅助类的完整示例
        /// </summary>
        static void CompleteExampleWithHelpers()
        {
            try
            {
                using var app = WordFactory.BlankWorkbook();
                app.Visible = false; // 隐藏Word窗口

                // 创建Ribbon管理器
                var ribbonManager = new RibbonManager(app);

                // 创建文档工具选项卡
                string documentToolsXml = ribbonManager.CreateDocumentToolsTab();
                Console.WriteLine("文档工具选项卡XML:");
                Console.WriteLine(documentToolsXml);

                // 验证XML
                bool isDocumentToolsValid = ribbonManager.ValidateRibbonXml(documentToolsXml);
                Console.WriteLine($"文档工具选项卡XML验证结果: {isDocumentToolsValid}");

                // 创建动态工具选项卡
                string dynamicToolsXml = ribbonManager.CreateDynamicToolsTab();
                Console.WriteLine("\n动态工具选项卡XML:");
                Console.WriteLine(dynamicToolsXml);

                // 验证XML
                bool isDynamicToolsValid = ribbonManager.ValidateRibbonXml(dynamicToolsXml);
                Console.WriteLine($"动态工具选项卡XML验证结果: {isDynamicToolsValid}");

                // 创建Ribbon定制助手
                var customizationHelper = new RibbonCustomizationHelper(app);

                // 创建文档处理工具解决方案
                var documentToolsSolution = customizationHelper.CreateDocumentToolsSolution();
                Console.WriteLine($"\n{documentToolsSolution.GenerateReport()}");

                // 评估复杂度
                var complexityAssessment = customizationHelper.AssessComplexity(documentToolsSolution);
                Console.WriteLine(complexityAssessment.GenerateReport());

                // 创建Ribbon UI控制器
                var uiController = new RibbonUIController(app);

                // 创建企业文档工具解决方案
                var enterpriseSolution = uiController.CreateEnterpriseDocumentSolution();
                Console.WriteLine($"\n{enterpriseSolution.GenerateReport()}");

                // 生成定制指南
                var customizationGuide = uiController.GenerateCustomizationGuide();
                Console.WriteLine($"\n{customizationGuide.GenerateReport()}");

                // 创建Ribbon界面演示文档
                bool demoDocumentCreated = uiController.CreateRibbonDemoDocument();
                Console.WriteLine($"\n演示文档创建结果: {demoDocumentCreated}");

                Console.WriteLine("\n使用辅助类的完整示例演示完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"使用辅助类的完整示例演示出错: {ex.Message}");
            }
        }
    }
}